package agb.servlets;

/*
 * SrvContacto.java
 *
 * Creado el 05 de marzo de 2009, 05:30 PM
 */


import agb.Modelo.Contacto;
import agb.Modelo.ContactoLOG;
import agb.servidor.ConexionBDDataSource;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import javax.servlet.*;
import javax.servlet.http.*;

//import org.me.bean.Contacto;

//import org.me.logica.ConectaLOG;
//import org.me.logica.ContactoLOG;


/**
 *
 * @author LIZARDO RIOS
 * @version
 */
public class SrvContacto extends HttpServlet {
    /*  Declaracion de Variables Globales */
    boolean estaConectado = false;
    ServletContext m_context = null;        // Usado para escribir el archivo log
    HttpSession session=null;               // Para declarar variables de session
    String msgPool = null;
    
    @Override
    public void init(ServletConfig config)throws ServletException {
        super.init(config);
        //forma de conexion cambiada
        //ConectaLOG conecta = new ConectaLOG();
        //estaConectado = (Boolean)conecta.verificarEstadoConexion();
        conectarse();
    }
//    
    public void conectarse() {
        if (!estaConectado) {
            ConexionBDDataSource conecta = new ConexionBDDataSource();
            msgPool = conecta.getMensaje();
            estaConectado = (Boolean) conecta.estadoConexion();
        }
    }
    
    @Override
    public void destroy() {
    
    }
//    
    //Metodo que procesa las consultas
    public void procesaConsulta(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        //Datos de configuracion de la pagina web
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>Obtención de datos del formulario</title></head>");
        
        //Obtenemos parametros enviados por la pagina web
        session = request.getSession(true);
        session.setAttribute("s_conectado", estaConectado);
        String accion = request.getParameter("accion");
        RequestDispatcher rd;   //Redirige la accion a otra pagina
        String next = null;     //Variable que almacena la pagina a redirigir
        //String mensaje=null;    //Para mandar los mensajes al usuario 
                
        String sCodContacto = "";
        String sNombres = "";
        String sTelefono = "";
        String sLocalidad = "";
        String sEmail = "";
        String sComentario = "";
        String sFechaEnvio = "";
        String sStart = "";
        String sPivote = "";
        String mensaje = "";
        String sPagina = "";
        
        int codContacto = 0;
        String icono = "";
        boolean estadoError = false;
        
        int opcionFiltrado = 0;
        String cursorCriterio = "0";
        String criterio = "";
        String fechaIni = "";
        String fechaFin = "";
        boolean opcionFecha = false;
        
        ArrayList listaContacto = new ArrayList();
        ArrayList listaXcontacto = new ArrayList();
        ArrayList listaFiltrados = new ArrayList();
        
        try {
            //Tipo de consulta del cliente
            int li_tipo_cons = 0;
            if(accion != null) {
                if(accion.equals("insertarContacto")) {
                    li_tipo_cons = 1;
                }else if(accion.equals("modificarContacto")) {
                    li_tipo_cons = 2;
                }else if(accion.equals("eliminarContacto")) {
                    li_tipo_cons = 3;
                }else if(accion.equals("mostrarDatosContacto")) {
                    li_tipo_cons = 4;
                }else if(accion.equals("listarContactos")) {
                    li_tipo_cons = 5;
                }else if(accion.equals("filtrarContactos")) {
                    li_tipo_cons = 6;
                }else if(accion.equals("mostrarFechas")) {
                    li_tipo_cons = 7;
                }
            }
            
            //Manejamos las distintas paginas por estados
            switch (li_tipo_cons) {
                case 1: //Nuevo Contacto
                    sPagina = (request.getParameter("pagina") == null) ? "" : request.getParameter("pagina");
                    sStart =  request.getParameter("start");
                    sPivote = request.getParameter("pivote");
                    
                    sNombres = (request.getParameter("nom") == null) ? "" : request.getParameter("nom");
                    sTelefono = (request.getParameter("tele") == null) ? "" : request.getParameter("tele");
                    sLocalidad = (request.getParameter("loca") == null) ? "" : request.getParameter("loca");
                    sEmail = (request.getParameter("mail") == null) ? "" : request.getParameter("mail");
                    sComentario = (request.getParameter("com") == null) ? "" : request.getParameter("com");
                    
                    if (true) {
                        Contacto bContacto = new Contacto();
                        bContacto.setNombres(sNombres);
                        bContacto.setTelefono(sTelefono);
                        bContacto.setLocalidad(sLocalidad);
                        bContacto.setEmail(sEmail);
                        bContacto.setComentario(sComentario);
                        ContactoLOG lContacto = new ContactoLOG();
                        lContacto.insertar(bContacto, true);
                        estadoError = lContacto.getError();
                        mensaje = lContacto.getMensaje();
                    }
                    if (estadoError) {
                        icono = "error";
                    } else {
                        icono = "info";
                        mensaje = "Contacto " + sNombres.trim() + " envio su comentario sastifactoriamente...!";
                    }
                    request.setAttribute("icono", icono);
                    request.setAttribute("r_mensaje", mensaje);
                    next="/dinamica/mensaje.jsp";
                    break;
////////////////////////////////////////////////////////////////////////////////                    
                case 2: //Modificar contacto 
                    sPagina = request.getParameter("pagina");
                    sStart = request.getParameter("start");
                    sPivote = request.getParameter("pivote");
                    sCodContacto = request.getParameter("txtCodigo");
                    codContacto = (sCodContacto != null) ? Integer.parseInt(sCodContacto) : 0;
                    sNombres = (request.getParameter("nom") == null) ? "" : request.getParameter("nom");
                    sTelefono = (request.getParameter("tele") == null) ? "" : request.getParameter("tele");
                    sLocalidad = (request.getParameter("loca") == null) ? "" : request.getParameter("loca");
                    sEmail = (request.getParameter("mail") == null) ? "" : request.getParameter("mail");
                    sComentario = (request.getParameter("com") == null) ? "" : request.getParameter("com");
                    
                    if (true) {
                        Contacto bContacto = new Contacto(true);
                        bContacto.setCodContacto(codContacto);
                        bContacto.setNombres(sNombres);
                        bContacto.setTelefono(sTelefono);
                        bContacto.setLocalidad(sLocalidad);
                        bContacto.setEmail(sEmail);
                        bContacto.setComentario(sComentario);
                        ContactoLOG lContacto = new ContactoLOG();
                        lContacto.modificar(bContacto, true);
                        mensaje = lContacto.getMensaje();
                        estadoError = lContacto.getError();
                    
                        if (estadoError) {
                            icono = "error";
                            next = "/dinamica/mensaje.jsp";
                        } else {
                            bContacto.setCodContacto(codContacto);
                            listaXcontacto = (ArrayList) lContacto.listarConctactoXcodigo(bContacto);
                            session.setAttribute("s_lista_x_contacto", listaXcontacto);
                            estadoError = lContacto.getError();
                            if (estadoError) {
                                mensaje = lContacto.getMensaje();
                                icono = "error";
                                next = "/dinamica/mensaje.jsp";
                            } else {
                                icono = "info";
                                next="/dinamica/administrador/include_usuarios/admi_ParienteModificar.jsp?pagina=" + sPagina + "&start=" + sStart + "&pivote=" + sPivote + "&r_mensaje=" + mensaje;
                            }
                        }
                    }
                    request.setAttribute("r_mensaje", mensaje);
                    request.setAttribute("icono", icono);
                    break;                    
////////////////////////////////////////////////////////////////////////////////                    
                case 3: //Eliminar Contacto 
                    sPagina = request.getParameter("pagina");
                    sStart = request.getParameter("start");
                    sPivote = request.getParameter("pivote");
                    sCodContacto = (request.getParameter("codContacto") == null) ? "0" : (String) request.getParameter("codContacto");
                    codContacto = Integer.parseInt(sCodContacto);
                    if (true) {
                        Contacto bContacto = new Contacto(true);
                        bContacto.setCodContacto(codContacto);
                                        
                        ContactoLOG lContacto = new ContactoLOG();
                        lContacto.eliminar(bContacto, true);
                        mensaje = lContacto.getMensaje();
                        if (lContacto.getError()) {
                            icono = "error";
                            next = "/dinamica/mensaje.jsp";
                        } else {
                            listaContacto = (ArrayList) lContacto.listarContacto();
                            session.setAttribute("s_lista_contacto", listaContacto);
                            if (lContacto.getError()) {
                                icono = "error";
                                next = "/dinamica/mensaje.jsp";
                            } else {
                                icono = "info";
                                next="/dinamica/administrador/include_usuarios/admi_ContactoListado.jsp?vPublicar=true&pagina=" + sPagina + "&start=" + sStart + "&pivote=" + sPivote;
                            }
                        }
                    }
                    request.setAttribute("s_mensaje", mensaje);
                    request.setAttribute("icono", icono);
                    break;
////////////////////////////////////////////////////////////////////////////////
                case 4: //Mostar Datos Contacto a modificar
                    sPagina = request.getParameter("pagina");
                    sStart = request.getParameter("start");
                    sPivote = request.getParameter("pivote");
                    sCodContacto = request.getParameter("codContacto");
                    codContacto = (sCodContacto == null) ? 0 : Integer.parseInt(sCodContacto);
                    if (true) {
                        Contacto bContacto = new Contacto(true);
                        bContacto.setCodContacto(codContacto);
                        ContactoLOG lContacto = new ContactoLOG();
                        listaXcontacto = (ArrayList) lContacto.listarConctactoXcodigo(bContacto);
                        mensaje = lContacto.getMensaje();
                        session.setAttribute("s_lista_x_contacto", listaXcontacto);
                        if (lContacto.getError()) {
                            icono = "error";
                            next = "/dinamica/mensaje.jsp";
                        } else {
                            icono = "";
                            next="/dinamica/administrador/include_usuarios/admi_ContactoModificar.jsp?pagina=" + sPagina + "&start=" + sStart + "&pivote=" + sPivote;
                        }
                    }
                    request.setAttribute("r_mensaje", mensaje);
                    request.setAttribute("icono", icono);
                    break;
                ////////////////////////////////////////////////////////////////////////////////
                case 5: //Listar Contactos 
                    if (true) {
                        ContactoLOG lContacto = new ContactoLOG();
                        listaContacto = (ArrayList) lContacto.listarContacto();
                        estadoError = lContacto.getError();
                        if (estadoError) {
                            icono = "error";
                            next = "/dinamica/mensaje.jsp";
                        } else {
                            icono = "info";
                            next="/dinamica/administrador/include_usuarios/admi_ContactoListado.jsp";
                        }
                    }
                    session.setAttribute("s_lista_contacto", listaContacto);
                    break;
                case 6: //Filtrar Contactos
                    sStart = (request.getParameter("start") == null) ? "0" : request.getParameter("start");
                    sPivote = (request.getParameter("pivote") == null) ? "0" : request.getParameter("pivote");
                    opcionFiltrado = (request.getParameter("opcionFiltrado") == null) ? 0 : Integer.parseInt(request.getParameter("opcionFiltrado"));
                    opcionFecha = (opcionFiltrado == 7) ? true : false;
                    if (true) {
                        ContactoLOG lContacto = new ContactoLOG();
                        switch (opcionFiltrado) {
                            case 1:
                                criterio = (request.getParameter("criterio") == null) ? "0" : request.getParameter("criterio");
                                listaFiltrados = lContacto.filtrarContacto(opcionFiltrado, criterio);
                                break;
                            case 2:
                            case 3:
                            case 4:
                            case 5:
                            case 6:
                                criterio = (request.getParameter("criterio") == null) ? "" : request.getParameter("criterio");
                                listaFiltrados = lContacto.filtrarContacto(opcionFiltrado, criterio);
                                break;
                            case 7:
                                Calendar c = Calendar.getInstance();
                                String dia = Integer.toString(c.get(Calendar.DATE));
                                int iMes = Integer.parseInt(Integer.toString(c.get(Calendar.MONTH))) + 1;
                                String mes = "" + iMes;
                                String annio = Integer.toString(c.get(Calendar.YEAR));
                                String fechaActual = dia + "/" + mes + "/" + annio;
                                fechaIni = (request.getParameter("fechaInicio") == null) ? fechaActual : request.getParameter("fechaInicio");
                                criterio = (request.getParameter("fechaFin") == null) ? fechaActual : request.getParameter("fechaFin");
                                listaFiltrados = lContacto.filtrarContacto(fechaIni, fechaFin);
                                break;
                        }
                    }
                    session.setAttribute("s_lista_contacto_filstrados", listaFiltrados);
                    request.setAttribute("r_opcion_filtrado", "true");
                    next="/dinamica/administrador/include_usuarios/admi_ContactoListado.jsp?opcionFecha="+ opcionFecha +"&r_valorFiltro="+ opcionFiltrado +"&valorCriterio="+ criterio +"&r_cursorCombo=true&start="+ sStart +"&pivote="+ sPivote;
                    break;
                case 7://Mostrar fechas
                    sStart = (request.getParameter("start") == null) ? "0" : request.getParameter("start");
                    sPivote = (request.getParameter("pivote") == null) ? "0" : request.getParameter("pivote");
                    opcionFiltrado = (request.getParameter("opcionFiltrado") == null) ? 0 : Integer.parseInt(request.getParameter("opcionFiltrado"));
                    if (opcionFiltrado == 7) {
                        opcionFecha = true;
                        cursorCriterio = "2";
                    } else {
                        opcionFecha = false;
                        cursorCriterio = "1";
                    }
                    
                    next="/dinamica/administrador/include_usuarios/admi_ContactoListado.jsp?opcionFecha="+ opcionFecha +"&r_valorFiltro="+ opcionFiltrado +"&r_cursorCriterio="+ cursorCriterio +"&start="+ sStart +"&pivote="+ sPivote;
                    break;
            }
            request.setAttribute("r_estilo", true);
            //redirijimos la accion a otra pagina
            rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);
        } catch (Throwable t) {
            out.println(t.toString());
            t.printStackTrace();
        }
        // Cerramos etiquetas html
        out.println("</body></html>");
        out.close();
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        procesaConsulta(request, response);
    }
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        procesaConsulta(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
